import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Clase Enemigo es uaa clase abstracta y Padre de los diferentes enemigos que puede haber
 * @author Programación Orientada a Objetos (Adrian Cerda Cerda , Jorge Armando Tovar Ojeda)
 * @version Maze of Souls (21 de noviembre del 2012)
 */
 
public abstract class Enemigo extends Actor
{

    public void act() 
    {
    }    
    /**
     * Metodo abstracto debido a que todas sus subclases definen 
     * el comportamiento de como se va a mover cada enemgo
    */
    public abstract void mover();
    /**
     * Metodo abstracto debido a que todas sus subclases definen 
     * el comportamiento de como va atacar cada enemigo
    */
    public abstract void atacar();
    /**
     * Metodo que heredan las subclases ya que ninguno de los enemigos 
     * se pueden mover si hay un obstaculo
     * @return true si puede avanzar o false si no puede
     */
    public boolean puedeAvanzar(Actor p)
    {
        if(p!=null && getWorld()!=null)
        {
      
         p= getOneObjectAtOffset(-20,0,Obstaculo.class);
         if(p!=null)
         {
           
           setLocation(getX()+5, getY());
           return false;
         }
         p= getOneObjectAtOffset(20,0,Obstaculo.class);
         if(p!=null)
         {
           
           setLocation(getX()-5, getY());
           return false;
         }
       
         p= getOneObjectAtOffset(0,20,Obstaculo.class);
         if(p!=null)
         {
           
           setLocation(getX(), getY()-5);
           return false;
         }
         p= getOneObjectAtOffset(0,-20,Obstaculo.class);
         if(p!=null)
         {
           
           setLocation(getX(), getY()+5);
           return false;
         }
       
         else 
         {
          return true;
         }
      }
     else return false;
     
    
    }
     


       
}
